package exception;

/**
 * java异常处理机制
 * java中所有错误的超类为：Throwable。其下有两个子类：Error和Exception
 * Error的子类描述的都是系统错误，比如虚拟机内存溢出等
 * Exception的子类描述的都是程序错误。比如空指针，下标越界等
 * 通常我们程序中处理的异常都是Exception
 *
 * java中有完善的异常机制。格式为：
 *     try{
 *         代码片段
 *     }catch（xxxException e）{
 *         处理try中出现的xxxException的dm
 *     }
 */
public class TryCatchDemo {
    public static void main(String[] args) {
        System.out.println("程序开始了");
        try {
          //  String str = null;
           // String str ="a";
            String str ="aa";
//当JVM 执行代码出现错误时，就会实例化对应问题的异常实例，并设置出错位置后将其处理流
            System.out.println(str.length());//当str为null时，会抛出空指针异常
            System.out.println(str.charAt(1));//当下标超范围时会抛出下标越界异常
            System.out.println(Integer.parseInt(str));
            //try语句块中报错代码以下的内容均不执行
            System.out.println("！！！！！！！！！！");
        }catch (NullPointerException e){
            //定义try中出现k指针异常后的解决办法
            System.out.println("出现了空指针！");
  // catch 可以定义多个，针对try中不同异常有不同处理方式时可以分别捕获并处理
        }catch (StringIndexOutOfBoundsException e){
            System.out.println("出现了字符串下标越界了!");
        }catch (NumberFormatException e){//数字格式异常
            System.out.println("数字格式异常");
            /**
             * 通常以下情况我们可以捕获一个超类异常：
             * 1：当try中出现了几种不同的异常，但是它们的解决办法相同时，我们可以catch
             * 它们的共同的超类异常即可。
             * 2：在最后一个catch处捕获Exception可以避免因为一个未处理的异常导致程序中断！
             */
        }catch (Exception e){
            System.out.println("反正就是出了个错！");
        }
        System.out.println("完成了,搞定了，结束了！");
    }
}